System.register(['aurelia-logging'], function (_export) {
'use strict';
var LogManager, logger, Handler, EventAggregator;
_export('includeEventsIn', includeEventsIn);
_export('configure', configure);
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function executeHandler(handler) {
try {
handler();
} catch (e) {
logger.error(e);
}
}
function includeEventsIn(obj) {
var ea = new EventAggregator();
obj.subscribeOnce = function (event, callback) {
return ea.subscribeOnce(event, callback);
};
obj.subscribe = function (event, callback) {
return ea.subscribe(event, callback);
};
obj.publish = function (event, data) {
ea.publish(event, data);
};
return ea;
}
function configure(aurelia) {
aurelia.withInstance(EventAggregator, includeEventsIn(aurelia));
}
return {
setters: [function (_aureliaLogging) {
LogManager = _aureliaLogging;
}],
execute: function () {
logger = LogManager.getLogger('event-aggregator');
Handler = (function () {
function Handler(messageType, callback) {
_classCallCheck(this, Handler);
this.messageType = messageType;
this.callback = callback;
}
Handler.prototype.handle = function handle(message) {
var _this = this;
if (message instanceof this.messageType) {
executeHandler(function () {
return _this.callback.call(null, message);
});
}
};
return Handler;
})();
EventAggregator = (function () {
function EventAggregator() {
_classCallCheck(this, EventAggregator);
this.eventLookup = {};
this.messageHandlers = [];
}
EventAggregator.prototype.publish = function publish(event, data) {
var subscribers, i;
if (typeof event === 'string') {
subscribers = this.eventLookup[event];
if (subscribers) {
subscribers = subscribers.slice();
i = subscribers.length;
while (i--) {
executeHandler(function () {
return subscribers[i](data, event);
});
}
}
} else {
subscribers = this.messageHandlers.slice();
i = subscribers.length;
while (i--) {
subscribers[i].handle(event);
}
}
};
EventAggregator.prototype.subscribe = function subscribe(event, callback) {
var subscribers, handler;
if (typeof event === 'string') {
subscribers = this.eventLookup[event] || (this.eventLookup[event] = []);
subscribers.push(callback);
return function () {
var idx = subscribers.indexOf(callback);
if (idx != -1) {
subscribers.splice(idx, 1);
}
};
} else {
handler = new Handler(event, callback);
subscribers = this.messageHandlers;
subscribers.push(handler);
return function () {
var idx = subscribers.indexOf(handler);
if (idx != -1) {
subscribers.splice(idx, 1);
}
};
}
};
EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) {
var sub = this.subscribe(event, function (data, event) {
sub();
return callback(data, event);
});
return sub;
};
return EventAggregator;
})();
_export('EventAggregator', EventAggregator);
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2V2ZW50LWFnZ3JlZ2F0b3Ivc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztrQkFFTSxNQUFNLEVBRU4sT0FBTyxFQXFCQSxlQUFlOzs2QkFtRVosZUFBZTs7dUJBa0JmLFNBQVM7Ozs7QUE3RnpCLFdBQVMsY0FBYyxDQUFDLE9BQU8sRUFBRTtBQUMvQixRQUFJO0FBQ0YsYUFBTyxFQUFFLENBQUM7S0FDWCxDQUFDLE9BQU0sQ0FBQyxFQUFFO0FBQ1QsWUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjtHQUNGOztBQXFFTSxXQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUM7QUFDbEMsUUFBSSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQzs7QUFFL0IsT0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFTLEtBQUssRUFBRSxRQUFRLEVBQUM7QUFDM0MsYUFBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztLQUMxQyxDQUFDOztBQUVGLE9BQUcsQ0FBQyxTQUFTLEdBQUcsVUFBUyxLQUFLLEVBQUUsUUFBUSxFQUFDO0FBQ3ZDLGFBQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDdEMsQ0FBQzs7QUFFRixPQUFHLENBQUMsT0FBTyxHQUFHLFVBQVMsS0FBSyxFQUFFLElBQUksRUFBQztBQUNqQyxRQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN6QixDQUFDOztBQUVGLFdBQU8sRUFBRSxDQUFDO0dBQ1g7O0FBRU0sV0FBUyxTQUFTLENBQUMsT0FBTyxFQUFDO0FBQ2hDLFdBQU8sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0dB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LENBQUMsQ0FBQyxFQUFFO0FBQ2IsMkJBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2VBQzVCO2FBQ0YsQ0FBQztXQUNIO1NBQ0Y7O0FBeERVLHVCQUFlLFdBMEQxQixhQUFhLEdBQUEsdUJBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQztBQUM1QixjQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBQyxVQUFTLElBQUksRUFBQyxLQUFLLEVBQUM7QUFDakQsZUFBRyxFQUFFLENBQUM7QUFDTixtQkFBTyxRQUFRLENBQUMsSUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDO1dBQzdCLENBQUMsQ0FBQztBQUNILGlCQUFPLEdBQUcsQ0FBQztTQUNaOztlQWhFVSxlQUFlOzs7aUNBQWYsZUFBZSIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS9ldmVudC1hZ2dyZWdhdG9yL3NyYy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIExvZ01hbmFnZXIgZnJvbSAnYXVyZWxpYS1sb2dnaW5nJztcblxuY29uc3QgbG9nZ2VyID0gTG9nTWFuYWdlci5nZXRMb2dnZXIoJ2V2ZW50LWFnZ3JlZ2F0b3InKTtcblxuY2xhc3MgSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2VUeXBlLCBjYWxsYmFjayl7XG4gICAgdGhpcy5tZXNzYWdlVHlwZSA9IG1lc3NhZ2VUeXBlO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIGhhbmRsZShtZXNzYWdlKXtcbiAgICBpZihtZXNzYWdlIGluc3RhbmNlb2YgdGhpcy5tZXNzYWdlVHlwZSl7XG4gICAgICBleGVjdXRlSGFuZGxlcigoKSA9PiB0aGlzLmNhbGxiYWNrLmNhbGwobnVsbCwgbWVzc2FnZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleGVjdXRlSGFuZGxlcihoYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgaGFuZGxlcigpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50QWdncmVnYXRvciB7XG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgdGhpcy5ldmVudExvb2t1cCA9IHt9O1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXJzID0gW107XG4gIH1cblxuICBwdWJsaXNoKGV2ZW50LCBkYXRhKXtcbiAgICB2YXIgc3Vic2NyaWJlcnMsIGk7XG5cbiAgICBpZih0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKXtcbiAgICAgIHN1YnNjcmliZXJzID0gdGhpcy5ldmVudExvb2t1cFtldmVudF07XG4gICAgICBpZihzdWJzY3JpYmVycyl7XG4gICAgICAgIHN1YnNjcmliZXJzID0gc3Vic2NyaWJlcnMuc2xpY2UoKTtcbiAgICAgICAgaSA9IHN1YnNjcmliZXJzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZShpLS0pIHtcbiAgICAgICAgICBleGVjdXRlSGFuZGxlcigoKSA9PiBzdWJzY3JpYmVyc1tpXShkYXRhLCBldmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBzdWJzY3JpYmVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzLnNsaWNlKCk7XG4gICAgICBpID0gc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZShpLS0pIHtcbiAgICAgICAgc3Vic2NyaWJlcnNbaV0uaGFuZGxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmUoZXZlbnQsIGNhbGxiYWNrKXtcbiAgICB2YXIgc3Vic2NyaWJlcnMsIGhhbmRsZXI7XG5cbiAgICBpZih0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKXtcbiAgICAgIHN1YnNjcmliZXJzID0gdGhpcy5ldmVudExvb2t1cFtldmVudF0gfHwgKHRoaXMuZXZlbnRMb29rdXBbZXZlbnRdID0gW10pO1xuXG4gICAgICBzdWJzY3JpYmVycy5wdXNoKGNhbGxiYWNrKTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBpZHggPSBzdWJzY3JpYmVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGlkeCAhPSAtMSkge1xuICAgICAgICAgIHN1YnNjcmliZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1lbHNle1xuICAgICAgaGFuZGxlciA9IG5ldyBIYW5kbGVyKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICBzdWJzY3JpYmVycyA9IHRoaXMubWVzc2FnZUhhbmRsZXJzO1xuXG4gICAgICBzdWJzY3JpYmVycy5wdXNoKGhhbmRsZXIpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGlkeCA9IHN1YnNjcmliZXJzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpZHggIT0gLTEpIHtcbiAgICAgICAgICBzdWJzY3JpYmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVPbmNlKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgdmFyIHN1YiA9IHRoaXMuc3Vic2NyaWJlKGV2ZW50LGZ1bmN0aW9uKGRhdGEsZXZlbnQpe1xuICAgICAgc3ViKCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZGF0YSxldmVudCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1YjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUV2ZW50c0luKG9iail7XG4gIHZhciBlYSA9IG5ldyBFdmVudEFnZ3JlZ2F0b3IoKTtcblxuICBvYmouc3Vic2NyaWJlT25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgcmV0dXJuIGVhLnN1YnNjcmliZU9uY2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBvYmouc3Vic2NyaWJlID0gZnVuY3Rpb24oZXZlbnQsIGNhbGxiYWNrKXtcbiAgICByZXR1cm4gZWEuc3Vic2NyaWJlKGV2ZW50LCBjYWxsYmFjayk7XG4gIH07XG5cbiAgb2JqLnB1Ymxpc2ggPSBmdW5jdGlvbihldmVudCwgZGF0YSl7XG4gICAgZWEucHVibGlzaChldmVudCwgZGF0YSk7XG4gIH07XG5cbiAgcmV0dXJuIGVhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlKGF1cmVsaWEpe1xuICBhdXJlbGlhLndpdGhJbnN0YW5jZShFdmVudEFnZ3JlZ2F0b3IsIGluY2x1ZGVFdmVudHNJbihhdXJlbGlhKSk7XG59XG4iXX0= |